package br.tads.poo.notas.apresentacao;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.InputMismatchException;
import java.util.Scanner;

import br.tads.poo.notas.gerencia.*;
import br.tads.poo.notas.objetos.Nota;

public class GerenteUI{
	private Scanner sc;
	private BufferedReader sca = new BufferedReader(new InputStreamReader(System.in));
	private Gerente gerente = new Gerente();
	private Caderno caderno;
	private Usuario usuario;
	private Caderno cadernos[];
	private Nota notas[];

	public void run() throws IOException{
		sc = new Scanner(System.in);
		int escolha = 4;
		do{
			menu();
			try{
				escolha = sc.nextInt();
				switch (escolha) { 	
				case 1: 
					loginUsuario(); break;
				case 2: 
					criarUsuario(); break;
				case 3: 
					excluirUsuario(); break;
				}
			}
			catch(InputMismatchException o){
				System.out.println("Digitar opção valida");
				sc = new Scanner(System.in);
			}
		}while(escolha != 0);
	}

	public void runUser(Usuario usuario) throws IOException{
		sc = new Scanner(System.in);
		int escolha = 5;
		do{
			menuUsuario();
			try{
				escolha = sc.nextInt();
				switch (escolha) { 	
				case 1: 
					criarCaderno(usuario); break;
				case 2: 
					listarCaderno(usuario); break;
				case 3: 
					verCaderno(usuario); break;
				case 4: 
					excluirCaderno(usuario); break;
				}
			}
			catch(InputMismatchException o){
				System.out.println("Digitar opção valida\n");
				sc = new Scanner(System.in);
			}
		}while(escolha != 0);
	}
	
	public void runNote(Caderno caderno) throws IOException{
		sc = new Scanner(System.in);
		int escolha = 5;
		do{
			menuCaderno();
			try{
				escolha = sc.nextInt();
				switch (escolha) { 	
				case 1: 
					criarNota(caderno); break;
				case 2:
					verNotas(caderno); break;
				case 3: 
					excluirNota(caderno); break;
				}
			}
			catch(InputMismatchException o){
				System.out.println("Digitar opção valida\n");
				sc = new Scanner(System.in);
			}
		}while(escolha != 0);
	}
	
	private void criarUsuario() throws IOException { 
		System.out.print("Digite o login: "); 
		String nome = sca.readLine(); 
		System.out.println("Digite a senha: "); 
		String senha = sca.readLine(); 

		System.out.println(gerente.criarUsuario(nome, senha));
	} 

	private void loginUsuario() throws IOException { 
		System.out.print("Digite o nome: "); 
		String nome = sca.readLine(); 
		System.out.println("Digite a senha: "); 
		String senha = sca.readLine(); 

		usuario = gerente.logarUsuario(nome, senha); 
		if (usuario != null){
			System.out.println("Usuario encontrado.");
			runUser(usuario);
		}
		else{
			System.out.println("Usuario não encontrado.");
		}
	}

	private void excluirUsuario() throws IOException { 
		System.out.print("Digite o login: "); 
		String nome = sca.readLine(); 
		System.out.println("Digite a senha: "); 
		String senha = sca.readLine(); 

		System.out.println(gerente.excluirUsuario(nome, senha));
	} 

	private void criarCaderno(Usuario usuario) throws IOException { 
		System.out.print("Digite o nome do caderno: "); 
		String nome = sca.readLine();

		System.out.println(usuario.criarCaderno(nome)); 
	} 

	private void listarCaderno(Usuario usuario) throws IOException { 
		cadernos = usuario.listarCadernos();

		for(int i = 0; i < cadernos.length; i++){
			if(cadernos[i] != null){
				System.out.println((i+1) + " - " + cadernos[i].getNome());
			}
		}
	} 

	private void verCaderno(Usuario usuario) throws IOException { 
		System.out.print("Digite o nome do caderno: "); 
		String nome = sca.readLine();

		caderno = usuario.verCaderno(nome);
		if (caderno != null){
			System.out.println("Caderno encontrado.\n");
			runNote(caderno);
		}
		else{
			System.out.println("Caderno não encontrado.\n");
		}
	} 

	private void excluirCaderno(Usuario usuario) throws IOException { 
		System.out.print("Digite o nome do caderno: "); 
		String nome = sca.readLine(); 

		System.out.println(usuario.excluirCaderno(nome));
	}
	
	private void criarNota(Caderno caderno) throws IOException { 
		System.out.print("Digite o titulo da nota: "); 
		String nome = sca.readLine();
		System.out.println("Digite sua descricao: "); 
		String senha = sca.readLine(); 

		System.out.println(caderno.criarNota(nome, senha)); 
	}
	
	private void verNotas(Caderno caderno) throws IOException { 
		notas = caderno.listarNotas();

		for(int i = 0; i < notas.length; i++){
			if(notas[i] != null){
				System.out.println((i+1) + " - " + notas[i].getTitulo());
				System.out.println(" - " + notas[i].getDescricao());
			}
		}
	}
	
	private void excluirNota(Caderno caderno) throws IOException { 
		System.out.print("Digite o titulo da nota: "); 
		String nome = sca.readLine(); 

		System.out.println(caderno.excluirNota(nome));
	}
	
	public static void menu(){
		System.out.println("========================");
		System.out.println("1 - Login");
		System.out.println("2 - Criar conta");
		System.out.println("3 - Excluir conta");
		System.out.println("========================");
	}

	public static void menuUsuario(){
		System.out.println("========================");
		System.out.println("-      Bem - vindo     -");
		System.out.println("------------------------");
		System.out.println("1 - Criar caderno");
		System.out.println("2 - Ver cadernos");
		System.out.println("3 - Alterar caderno");
		System.out.println("4 - Excluir caderno");
		System.out.println("0 - Sair");		
		System.out.println("========================");
	}
	
	public static void menuCaderno(){
		System.out.println("========================    ========================");
		System.out.println("-          Nota        -    -       Lembrete       -");
		System.out.println("------------------------    ------------------------");
		System.out.println("1 - Criar nota              4 - Criar lembrete");
		System.out.println("2 - Ver nota                5 - Ver lembrete");
		System.out.println("3 - Excluir nota            6 - Excluir lembrete");
		System.out.println("                     0 - Sair");
		System.out.println("========================    ========================");
	}
}
